🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / app / src / androidTest / java / com / geeksville / mesh / NodeInfoDaoTest.kt
Displaying Raw • Download
app/src/androidTest/java/com/geeksville/mesh/NodeInfoDaoTest.kt ui_message_list (be3f882f) Text, 10.40 KB
T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787com.geeksville.mesh
Tff7b72import T7ee787androidx.room.Room
Tff7b72import T7ee787androidx.test.ext.junit.runners.AndroidJUnit4
Tff7b72import T7ee787androidx.test.platform.app.InstrumentationRegistry
Tff7b72import T7ee787com.geeksville.mesh.database.MeshtasticDatabase
Tff7b72import T7ee787com.geeksville.mesh.database.dao.NodeInfoDao
Tff7b72import T7ee787com.geeksville.mesh.database.entity.MyNodeEntity
Tff7b72import T7ee787com.geeksville.mesh.database.entity.NodeEntity
Tff7b72import T7ee787com.geeksville.mesh.model.Node
Tff7b72import T7ee787com.geeksville.mesh.model.NodeSortOption
Tff7b72import T7ee787com.geeksville.mesh.util.onlineTimeThreshold
Tff7b72import T7ee787com.google.protobuf.ByteString
Tff7b72import T7ee787kotlinx.coroutines.flow.first
Tff7b72import T7ee787kotlinx.coroutines.flow.map
Tff7b72import T7ee787kotlinx.coroutines.runBlocking
Tff7b72import T7ee787org.junit.After
Tff7b72import T7ee787org.junit.Assert.assertEquals
Tff7b72import T7ee787org.junit.Assert.assertFalse
Tff7b72import T7ee787org.junit.Assert.assertTrue
Tff7b72import T7ee787org.junit.Before
Tff7b72import T7ee787org.junit.Test
Tff7b72import T7ee787org.junit.runner.RunWith
Tf0883e@RunWithTb4b4b4(Te6edf3AndroidJUnit4Tff7b72::Te6edf3classTb4b4b4)
Tff7b72class T56d364NodeInfoDaoTest Tb4b4b4{
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3databaseTb4b4b4: Te6edf3MeshtasticDatabase
Tff7b72private Tff7b72lateinit Tff7b72var Te6edf3nodeInfoDaoTb4b4b4: Te6edf3NodeInfoDao
Tff7b72private Tff7b72val Te6edf3onlineThreshold Tff7b72= Te6edf3onlineTimeThresholdTb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3offlineNodeLastHeard Tff7b72= Te6edf3onlineThreshold Tff7b72- T79c0ff3T79c0ff0
Tff7b72private Tff7b72val Te6edf3onlineNodeLastHeard Tff7b72= Te6edf3onlineThreshold Tff7b72+ T79c0ff2T79c0ff0
Tff7b72private Tff7b72val Te6edf3unknownNode Tff7b72= Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= T79c0ff7Tb4b4b4,
Te6edf3user Tff7b72= Te6edf3user Tb4b4b4{
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff!a1b2c3d4Ta5d6ff"
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic c3d4Ta5d6ff"
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ffc3d4Ta5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3UNSET
Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic c3d4Ta5d6ff"Tb4b4b4,
Te6edf3shortName Tff7b72= Tff7b72null T8b949e// Dao filter for includeUnknown
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3ourNode Tff7b72= Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= T79c0ff8Tb4b4b4,
Te6edf3user Tff7b72= Te6edf3user Tb4b4b4{
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff+16508765308Ta5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(T79c0ff8Tb4b4b4)
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffKevin MesterTa5d6ff"
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ffKLOTa5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Te6edf3isLicensed Tff7b72= Tff7b72false
Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffKevin MesterTa5d6ff"Tb4b4b4, Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ffKLOTa5d6ff"Tb4b4b4,
Te6edf3latitude Tff7b72= T79c0ff3T79c0ff0.267153Tb4b4b4, Te6edf3longitude Tff7b72= Tff7b72-T79c0ff9T79c0ff7.743057Tb4b4b4, T8b949e// Austin
Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3onlineNode Tff7b72= Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= T79c0ff9Tb4b4b4,
Te6edf3user Tff7b72= Te6edf3user Tb4b4b4{
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff!25060801Ta5d6ff"
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0801Ta5d6ff"
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0801Ta5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0801Ta5d6ff"Tb4b4b4,
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0801Ta5d6ff"Tb4b4b4,
Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3onlineNodeLastHeard
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3offlineNode Tff7b72= Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= T79c0ff1T79c0ff0Tb4b4b4,
Te6edf3user Tff7b72= Te6edf3user Tb4b4b4{
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff!25060802Ta5d6ff"
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0802Ta5d6ff"
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0802Ta5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0802Ta5d6ff"Tb4b4b4,
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0802Ta5d6ff"Tb4b4b4,
Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3offlineNodeLastHeard
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3directNode Tff7b72= Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= T79c0ff1T79c0ff1Tb4b4b4,
Te6edf3user Tff7b72= Te6edf3user Tb4b4b4{
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff!25060803Ta5d6ff"
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0803Ta5d6ff"
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0803Ta5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0803Ta5d6ff"Tb4b4b4,
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0803Ta5d6ff"Tb4b4b4,
Te6edf3hopsAway Tff7b72= T79c0ff0Tb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3onlineNodeLastHeard
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3relayedNode Tff7b72= Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= T79c0ff1T79c0ff2Tb4b4b4,
Te6edf3user Tff7b72= Te6edf3user Tb4b4b4{
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff!25060804Ta5d6ff"
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0804Ta5d6ff"
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0804Ta5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffMeshtastic 0804Ta5d6ff"Tb4b4b4,
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ff0804Ta5d6ff"Tb4b4b4,
Te6edf3hopsAway Tff7b72= T79c0ff3Tb4b4b4,
Te6edf3lastHeard Tff7b72= Te6edf3onlineNodeLastHeard
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3myNodeInfoTb4b4b4: Te6edf3MyNodeEntity Tff7b72= Te6edf3MyNodeEntityTb4b4b4(
Te6edf3myNodeNum Tff7b72= Te6edf3ourNodeTb4b4b4.Te6edf3numTb4b4b4,
Te6edf3model Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3firmwareVersion Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3couldUpdate Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3shouldUpdate Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3currentPacketId Tff7b72= T79c0ff1LTb4b4b4,
Te6edf3messageTimeoutMsec Tff7b72= T79c0ff5 Tff7b72* T79c0ff6T79c0ff0 Tff7b72* T79c0ff1T79c0ff0T79c0ff0T79c0ff0Tb4b4b4,
Te6edf3minAppVersion Tff7b72= T79c0ff1Tb4b4b4,
Te6edf3maxChannels Tff7b72= T79c0ff8Tb4b4b4,
Te6edf3hasWifi Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3testPositions Tff7b72= Te6edf3arrayOfTb4b4b4(
T79c0ff0.0 Te6edf3to T79c0ff0.0Tb4b4b4,
T79c0ff3T79c0ff2.776665 Te6edf3to Tff7b72-T79c0ff9T79c0ff6.796989Tb4b4b4, T8b949e// Dallas
T79c0ff3T79c0ff2.960758 Te6edf3to Tff7b72-T79c0ff9T79c0ff6.733521Tb4b4b4, T8b949e// Richardson
T79c0ff3T79c0ff2.912901 Te6edf3to Tff7b72-T79c0ff9T79c0ff6.781776Tb4b4b4, T8b949e// North Dallas
T79c0ff2T79c0ff9.760427 Te6edf3to Tff7b72-T79c0ff9T79c0ff5.369804Tb4b4b4, T8b949e// Houston
T79c0ff3T79c0ff3.748997 Te6edf3to Tff7b72-T79c0ff8T79c0ff4.387985Tb4b4b4, T8b949e// Atlanta
T79c0ff3T79c0ff4.052235 Te6edf3to Tff7b72-T79c0ff1T79c0ff1T79c0ff8.243683Tb4b4b4, T8b949e// Los Angeles
T79c0ff4T79c0ff0.712776 Te6edf3to Tff7b72-T79c0ff7T79c0ff4.005974Tb4b4b4, T8b949e// New York City
T79c0ff4T79c0ff1.878113 Te6edf3to Tff7b72-T79c0ff8T79c0ff7.629799Tb4b4b4, T8b949e// Chicago
T79c0ff3T79c0ff9.952583 Te6edf3to Tff7b72-T79c0ff7T79c0ff5.165222Tb4b4b4, T8b949e// Philadelphia
Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3testNodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3ourNodeTb4b4b4, Te6edf3unknownNodeTb4b4b4, Te6edf3onlineNodeTb4b4b4, Te6edf3offlineNodeTb4b4b4, Te6edf3directNodeTb4b4b4, Te6edf3relayedNodeTb4b4b4) Tff7b72+ Te6edf3testPositionsTb4b4b4.Te6edf3mapIndexed Tb4b4b4{ Te6edf3indexTb4b4b4, Te6edf3pos Tff7b72-Tff7b72>
Te6edf3NodeEntityTb4b4b4(
Te6edf3num Tff7b72= T79c0ff1T79c0ff0T79c0ff0T79c0ff0 Tff7b72+ Te6edf3indexTb4b4b4,
Te6edf3user Tff7b72= Te6edf3user Tb4b4b4{
Te6edf3id Tff7b72= Ta5d6ff"Ta5d6ff+165087653%02dTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(T79c0ff9 Tff7b72+ Te6edf3indexTb4b4b4)
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffKevin MesterTffd700$Te6edf3indexTa5d6ff"
Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ffKMTffd700$Te6edf3indexTa5d6ff"
Te6edf3hwModel Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3ANDROID_SIM
Te6edf3isLicensed Tff7b72= Tff7b72false
Te6edf3publicKey Tff7b72= Te6edf3ByteStringTb4b4b4.Te6edf3copyFromTb4b4b4(Te6edf3ByteArrayTb4b4b4(T79c0ff3T79c0ff2Tb4b4b4) Tb4b4b4{ Te6edf3indexTb4b4b4.Te6edf3toByteTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffKevin MesterTffd700$Te6edf3indexTa5d6ff"Tb4b4b4, Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ffKMTffd700$Te6edf3indexTa5d6ff"Tb4b4b4,
Te6edf3latitude Tff7b72= Te6edf3posTb4b4b4.Te6edf3firstTb4b4b4, Te6edf3longitude Tff7b72= Te6edf3posTb4b4b4.Te6edf3secondTb4b4b4,
Te6edf3lastHeard Tff7b72= T79c0ff9 Tff7b72+ Te6edf3indexTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tf0883e@Before
Tff7b72fun Td2a8ffcreateDbTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Unit Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3context Tff7b72= Te6edf3InstrumentationRegistryTb4b4b4.Te6edf3getInstrumentationTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3targetContext
Te6edf3database Tff7b72= Te6edf3RoomTb4b4b4.Te6edf3inMemoryDatabaseBuilderTb4b4b4(Te6edf3contextTb4b4b4, Te6edf3MeshtasticDatabaseTff7b72::Te6edf3classTb4b4b4.Te6edf3javaTb4b4b4)Tb4b4b4.Te6edf3buildTb4b4b4(Tb4b4b4)
Te6edf3nodeInfoDao Tff7b72= Te6edf3databaseTb4b4b4.Te6edf3nodeInfoDaoTb4b4b4(Tb4b4b4)
Te6edf3nodeInfoDaoTb4b4b4.Te6edf3apply Tb4b4b4{
Te6edf3putAllTb4b4b4(Te6edf3testNodesTb4b4b4)
Te6edf3setMyNodeInfoTb4b4b4(Te6edf3myNodeInfoTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tf0883e@After
Tff7b72fun Td2a8ffcloseDbTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3databaseTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)
Tb4b4b4}
T8b949e/**
* Retrieves a list of nodes based on [sort], [filter] and [includeUnknown] parameters.
* The list excludes [ourNode] to ensure consistency in the results.
*/
Tff7b72private Tff7b72suspend Tff7b72fun Td2a8ffgetNodesTb4b4b4(
Te6edf3sortTb4b4b4: Te6edf3NodeSortOption Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3LAST_HEARDTb4b4b4,
Te6edf3filterTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Te6edf3includeUnknownTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72trueTb4b4b4,
Te6edf3onlyOnlineTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Te6edf3onlyDirectTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4) Tff7b72= Te6edf3nodeInfoDaoTb4b4b4.Te6edf3getNodesTb4b4b4(
Te6edf3sort Tff7b72= Te6edf3sortTb4b4b4.Te6edf3sqlValueTb4b4b4,
Te6edf3filter Tff7b72= Te6edf3filterTb4b4b4,
Te6edf3includeUnknown Tff7b72= Te6edf3includeUnknownTb4b4b4,
Te6edf3hopsAwayMax Tff7b72= Tff7b72if Tb4b4b4(Te6edf3onlyDirectTb4b4b4) T79c0ff0 Tff7b72else Tff7b72-T79c0ff1Tb4b4b4,
Te6edf3lastHeardMin Tff7b72= Tff7b72if Tb4b4b4(Te6edf3onlyOnlineTb4b4b4) Te6edf3onlineTimeThresholdTb4b4b4(Tb4b4b4) Tff7b72else Tff7b72-T79c0ff1Tb4b4b4,
Tb4b4b4)Tb4b4b4.Te6edf3map Tb4b4b4{ Te6edf3list Tff7b72-Tff7b72> Te6edf3listTb4b4b4.Te6edf3map Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3toModelTb4b4b4(Tb4b4b4) Tb4b4b4} Tb4b4b4}Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3filter Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3num Tff7b72!Tff7b72= Te6edf3ourNodeTb4b4b4.Te6edf3num Tb4b4b4}
Tf0883e@Test T8b949e// node list size
Tff7b72fun Td2a8fftestNodeListSizeTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3nodeInfoDaoTb4b4b4.Te6edf3nodeDBbyNumTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff6 Tff7b72+ Te6edf3testPositionsTb4b4b4.Te6edf3sizeTb4b4b4, Te6edf3nodesTb4b4b4.Te6edf3sizeTb4b4b4)
Tb4b4b4}
Tf0883e@Test T8b949e// nodeDBbyNum() re-orders our node at the top of the list
Tff7b72fun Td2a8fftestOurNodeInfoIsFirstTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3nodeInfoDaoTb4b4b4.Te6edf3nodeDBbyNumTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3ourNodeTb4b4b4.Te6edf3numTb4b4b4, Te6edf3nodesTb4b4b4.Te6edf3valuesTb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3nodeTb4b4b4.Te6edf3numTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestSortByLastHeardTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3sort Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3LAST_HEARDTb4b4b4)
Tff7b72val Te6edf3sortedNodes Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3sortedByDescending Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lastHeard Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3sortedNodesTb4b4b4, Te6edf3nodesTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestSortByAlphaTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3sort Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3ALPHABETICALTb4b4b4)
Tff7b72val Te6edf3sortedNodes Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3sortedBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3userTb4b4b4.Te6edf3longNameTb4b4b4.Te6edf3uppercaseTb4b4b4(Tb4b4b4) Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3sortedNodesTb4b4b4, Te6edf3nodesTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestSortByDistanceTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3sort Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3DISTANCETb4b4b4)
Tff7b72fun Te6edf3NodeEntityTb4b4b4.Td2a8fftoNodeTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3NodeTb4b4b4(Te6edf3num Tff7b72= Te6edf3numTb4b4b4, Te6edf3user Tff7b72= Te6edf3userTb4b4b4, Te6edf3position Tff7b72= Te6edf3positionTb4b4b4)
Tff7b72val Te6edf3sortedNodes Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3sortedWithTb4b4b4( T8b949e// nodes with invalid (null) positions at the end
Te6edf3compareByTff7b72<Te6edf3NodeTff7b72> Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tb4b4b4}Tb4b4b4.Te6edf3thenBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3distanceTb4b4b4(Te6edf3ourNodeTb4b4b4.Te6edf3toNodeTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}
Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3sortedNodesTb4b4b4, Te6edf3nodesTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestSortByChannelTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3sort Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3CHANNELTb4b4b4)
Tff7b72val Te6edf3sortedNodes Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3sortedBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3channel Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3sortedNodesTb4b4b4, Te6edf3nodesTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestSortByViaMqttTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3sort Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3VIA_MQTTTb4b4b4)
Tff7b72val Te6edf3sortedNodes Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3sortedBy Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3userTb4b4b4.Te6edf3longNameTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ff(MQTT)Ta5d6ff"Tb4b4b4) Tb4b4b4}
Te6edf3assertEqualsTb4b4b4(Te6edf3sortedNodesTb4b4b4, Te6edf3nodesTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestIncludeUnknownIsFalseTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3includeUnknown Tff7b72= Tff7b72falseTb4b4b4)
Tff7b72val Te6edf3containsUnsetNode Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isUnknownUser Tb4b4b4}
Te6edf3assertFalseTb4b4b4(Te6edf3containsUnsetNodeTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestIncludeUnknownIsTrueTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3includeUnknown Tff7b72= Tff7b72trueTb4b4b4)
Tff7b72val Te6edf3containsUnsetNode Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3isUnknownUser Tb4b4b4}
Te6edf3assertTrueTb4b4b4(Te6edf3containsUnsetNodeTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestOfflineNodesIncludedByDefaultTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3nodesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lastHeard Tff7b72< Te6edf3onlineTimeThresholdTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestOnlyOnlineExcludesOfflineTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3onlyOnline Tff7b72= Tff7b72trueTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3nodesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3lastHeard Tff7b72< Te6edf3onlineTimeThresholdTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestRelayedNodesIncludedByDefaultTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Tb4b4b4)
Te6edf3assertTrueTb4b4b4(Te6edf3nodesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3hopsAway Tff7b72> T79c0ff0 Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestOnlyDirectExcludesRelayedTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Te6edf3onlyDirect Tff7b72= Tff7b72trueTb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3nodesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3hopsAway Tff7b72> T79c0ff0 Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8fftestPkcMismatchTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runBlocking Tb4b4b4{
Tff7b72val Te6edf3newNode Tff7b72= Te6edf3testNodesTff7b72[T79c0ff1Tff7b72]Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3user Tff7b72= Te6edf3testNodesTff7b72[T79c0ff1Tff7b72]Tb4b4b4.Te6edf3userTb4b4b4.Te6edf3copy Tb4b4b4{
Te6edf3publicKey Tff7b72= Te6edf3ByteStringTb4b4b4.Te6edf3copyFromTb4b4b4(Te6edf3ByteArrayTb4b4b4(T79c0ff3T79c0ff2Tb4b4b4) Tb4b4b4{ T79c0ff9T79c0ff9 Tb4b4b4}Tb4b4b4)
Tb4b4b4}Tb4b4b4)
Te6edf3nodeInfoDaoTb4b4b4.Te6edf3putAllTb4b4b4(Te6edf3listOfTb4b4b4(Te6edf3newNodeTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3nodes Tff7b72= Te6edf3getNodesTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3containsMismatchNode Tff7b72= Te6edf3nodesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3mismatchKey Tb4b4b4}
Te6edf3assertTrueTb4b4b4(Te6edf3containsMismatchNodeTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.09s